# 定义时钟，周期为10ns，时钟源为clk
create_clock -period 10 [get_ports clk]

# 约束外部输入路径的延迟，最大为4ns，输入端口为A
set_input_delay -max 4 -clock CLK [get_ports A]

# 多端口输入时，对时钟CLK以外所有输入端口设置约束
set_input_delay 3.5 -clock CLK -max [remove_from_collection [all_inputs][get_ports CLK]]

# 如果移除多个时钟
remove_from_collection [all_inputs][get_ports "CLK CLK"]

# 约束外部输出路径的延迟，最大为5.4
set_output_delay -max 5.4 -clock CLK [get_ports B]

# 时间预算的约束
create_clock -period 10 [get_ports CLK]
set_input_delay -max $Tclk -clock CLK [all_inputs]
remove_input_delay [get_ports CLK]
set_output_delay -max [expr 10-$Tclk] -clock CLK [all_outputs]

# 约束组合逻辑的延时
set_input_delay 0.4 -clock CLK -add_delay [get_ports B]
set_input_delay 0.2 -clock CLK -add_delay [get_ports D]
set_max_delay $CLK_PERIOD -from [get_ports B] -to [get_ports D]

# 时钟源到时钟端口的延时
set_clock_latency -source -max 0.7 [get_clocks clk]

# 时钟端口到寄存器的时钟端口延时
set_clock_latency -max 0.3 [get_clocks clk]

# 设置建立时间的时钟的不确定时间，
# 时钟偏移算两倍，有向前有向后的偏移2*0.03ns
# 时钟抖动只算本级时间的抖动0.04ns
# 还要预留建立时间的不确定时间0.05ns
set_clock_uncertainty -setup 0.15 [get_clocks clk]

# 设置时钟的转换时间
set_clock_transition 0.12 [get_clocks clk]

# 设置工作条件
set_operatting_conditions -max $OPERA_CONDITION -max_library $LIB_NAME

# 关闭WLM
set auto_wire_load_selection false

# 手动选择线负载模型
set_wire_load_model -name $WIRE_LOAD_MODEL -library $LIB_NAME

# 查看敲过的命令
history keep 200

# 读入设计文件
# 会自动默认a.v为top
# 两种方法
read_verilog {a.v b.v}
# 同时可以设置文件中的parameters
analyze -format verilog {a.v b.v} -parameters "a=9,b=17"
# 设置当前my_top为top文件
current_design MY_TOP
elaborate my_top
# 检查链接
link
# 检查设计，返回1为通过
check_design

# 把软件读进来的.v文件已经在内存中
# 转变为.ddc文件，存下来，
# 下次如果.v文件不变，就可以之间读
# .ddc文件
write -format ddc -hier -output unmad/my_top.ddc

# 查看有哪些库
list libs

# 看xxx库的详细信息
report_lib xxxx

# 查看某个库
get_app_var target_library
echo $target_library

# 查看读进来的设计文件，带*的为top文件
lis_designs